package org.wtframework.website.server.service;


import java.util.Date;
import java.util.List;
import java.util.Map;

import org.openredhead.springx.core.server.page.IPage;
import org.openredhead.springx.core.web.mvc.ajaxrpc.BasicAjaxRpcRemoteService;
import org.openredhead.springx.core.web.mvc.annotation.AjaxRpcMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.wtframework.platform.server.util.StringOperationUtils;
import org.wtframework.website.server.manager.NoticeBoardManager;
import org.wtframework.website.server.model.impl.NoticeBoard;

/**
 * 
 * <B>版权所有：</B> 佛山市网特计算机软件有限公司 <br/><br/>
 * <B>类描述：</B> （公告栏Service） <br/><br/>
 * <B>作者：</B> 何展操 <br/><br/>
 * <B>创建日期：</B> 2014年7月3日 下午4:58:50 
 *
 */
@Service
public class NoticeBoardService extends BasicAjaxRpcRemoteService {
	
	@Autowired
	private NoticeBoardManager noticeBoardManager;

	
	@AjaxRpcMethod
	public void deleteNoticeList(List<Integer> idList){
		
		for(Integer id : idList){
			NoticeBoard noticeBoard = noticeBoardManager.load(id);
			if(noticeBoard!=null){
				String content = noticeBoard.getContent();
				StringOperationUtils.ueditorFilesDelete(content, "nzsz/ueditor");
				noticeBoardManager.delete(noticeBoard);
			}
		}
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（后台管理页） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014年7月21日 上午11:46:07 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	@AjaxRpcMethod
	public IPage<NoticeBoard> findAllNotice(Integer pageNo, Integer pageSize){
		String hql="from NoticeBoard order by isTop desc, submiTime desc";
		return noticeBoardManager.findByQuery(hql).getPageByPageNo(pageNo, pageSize);
	}
	
	@AjaxRpcMethod
	public IPage<NoticeBoard> findIssueStatusNotice(Integer pageNo, Integer pageSize){
		String hql="from NoticeBoard where issueStatus=1 order by isTop desc, submiTime desc";
		return noticeBoardManager.findByQuery(hql).getPageByPageNo(pageNo, pageSize);
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（前天首页所用） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014年7月21日 上午11:45:31 
	 * @param pageNo
	 * @param pageSize
	 * @param parameNames
	 * @param queryString
	 * @param values
	 * @return
	 */
	@AjaxRpcMethod
	public IPage<Map<String, Object>> findNoticeList(Integer pageNo, Integer pageSize, String[] parameNames, String queryString, Object... values){
		return noticeBoardManager.findProperty(parameNames, queryString, values).getPageByPageNo(pageNo, pageSize);
	}
	
	@AjaxRpcMethod
	public NoticeBoard findNoticeById(Integer id){
		return noticeBoardManager.load(id);
	}
	
	//发布公告
	@AjaxRpcMethod
	public void issueNotice(Integer id){
		Date date=new Date();
		NoticeBoard notice=noticeBoardManager.load(id);
		notice.setIssueStatus(1);
		notice.setPusTime(date);
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（添加公告） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014年7月3日 下午4:11:51 
	 * @param noticeBoard
	 * @param title
	 * @param publisherName
	 * @param content
	 */
	@AjaxRpcMethod
	public void addNotice(NoticeBoard noticeBoard){
		Date date=new Date();
		//设置提交时间为当前时间
		noticeBoard.setSubmiTime(date);
		//默认未发布
		noticeBoard.setIssueStatus(0);
		//默认不置顶
		noticeBoard.setIsTop(0);
		String content = noticeBoard.getContent();
		content=StringOperationUtils.ueditorFilterByAdd(content, "nzsz/ueditor");
		noticeBoard.setContent(content);
		noticeBoardManager.save(noticeBoard);
	}
	
	//修改公告
	@AjaxRpcMethod
	public void updateNotice(NoticeBoard noticeBoard){
		NoticeBoard notice=noticeBoardManager.load(noticeBoard.getId());
		String content = noticeBoard.getContent();
		content = StringOperationUtils.ueditorFilterByUpdate(notice.getContent(), content, "nzsz/ueditor");
		notice.setContent(content);
		notice.setTitle(noticeBoard.getTitle());
		notice.setPublisher(noticeBoard.getPublisher());
		notice.setPageViews((long)0);
		//设置提交时间为当前时间
		notice.setSubmiTime(new Date());
		//设置发布时间为空
		notice.setPusTime(null);
		//设置发布状态，未发布
		notice.setIssueStatus(0);
		//设置不置顶
		notice.setIsTop(0);
		noticeBoardManager.save(notice);
	}
	
	//公告置顶
	@AjaxRpcMethod
	public void noticeToTop(Integer id){
		NoticeBoard notice=findNoticeById(id);
		notice.setIsTop(MaxTopValue());
		noticeBoardManager.save(notice);
	}
	
	//公告置顶
	@AjaxRpcMethod
	public void noticeNoToTop(Integer id){
		NoticeBoard notice=findNoticeById(id);
		notice.setIsTop(0);
		noticeBoardManager.save(notice);
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（取置顶字段最大值） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014-8-20 下午10:21:02 
	 * @return
	 */
	public int MaxTopValue(){
		int maxValue=0;
		List<NoticeBoard> noticeBoardList=noticeBoardManager.loadAll().getList();
		for(int i=0;i<noticeBoardList.size();i++){
			if(noticeBoardList.get(i).getIsTop()>maxValue){
				maxValue=noticeBoardList.get(i).getIsTop();
			}
		}
		return ++maxValue;
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（公告首页更多） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014年7月21日 上午11:53:56 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	@AjaxRpcMethod
	public IPage<NoticeBoard> findNoticeMoreList(Integer pageNo, Integer pageSize){
		String hql="from NoticeBoard where issueStatus=1 order by isTop desc, submiTime desc";
		return noticeBoardManager.findByQuery(hql).getPageByPageNo(pageNo, pageSize);
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（通过标题查询公告） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014年7月16日 下午9:20:57 
	 * @param pageNo
	 * @param pageSize
	 * @param title
	 * @return
	 */
	public IPage<NoticeBoard> findNoticeByName(Integer pageNo, Integer pageSize, String title){
		String hql="from NoticeBoard where title like ? order by isTop desc, submiTime desc";
		return noticeBoardManager.findByQuery(hql, new Object[]{"%"+title+"%"}).getPageByPageNo(pageNo, pageSize);
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（阅读量+1） <br/>
	 *
	 * <B>作者：	 </B> 何展操 <br/>
	 * <B>创建日期：</B> 2014年8月8日 下午4:52:00
	 */
	public int increasePageViews(String hql){
		return noticeBoardManager.getQuery(hql).executeUpdate();
		
	}
	
}
